/// \file RenderObjectDX11.h
/// \date 2012-12-05
/// \brief concrete class in DX11 that models a render object, as mesh information, etc 

#ifndef _SNAKE_RENDER_RENDEROBJECTDX11_H__
#define _SNAKE_RENDER_RENDEROBJECTDX11_H__

// DX11
#include <d3d11.h>

#include <Render/Include/RenderObject.h>
namespace Render
{

/// \brief concrete class in DX11 that models a render object, as mesh information, etc 
class RenderObjectDX11 : public RenderObject
{
    /// \brief RendererDx11 is the only one that can create, destroy and use this class 
    friend class RendererDX11;

private:
    // ========== INTERNAL METHODS ========== //
    
    /// \brief Constructor, receives the mesh info already created
    RenderObjectDX11(ID3D11Buffer* vertex_buffer, unsigned int vertex_size_stride, unsigned int vertex_offset, ID3D11Buffer* index_buffer, unsigned int index_count, D3D_PRIMITIVE_TOPOLOGY primitive_type);
    
    /// \brief Destructor, releases the mesh
    virtual ~RenderObjectDX11(void);
    
    /// \brief return DX9Mesh structure pointer
    ID3D11Buffer* getVertexBuffer();
    unsigned int getVertexSizeStride();
    unsigned int getVertexOffset();
    ID3D11Buffer* getIndexBuffer();
    unsigned int getIndexCount();
    ID3D11InputLayout* getInputLayout();
    D3D_PRIMITIVE_TOPOLOGY getPrimitiveType();
    
    // ========== ATTRIBUTES ========== //
    
    ID3D11Buffer* vertex_buffer;
    unsigned int vertex_size_stride;
    unsigned int vertex_offset;
    ID3D11Buffer* index_buffer;
    unsigned int index_count;
    D3D_PRIMITIVE_TOPOLOGY primitive_type;
    
};
};
#endif // _SNAKE_RENDER_RENDEROBJECTDX11_H__
